﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/// <summary>
/// Author toanvt
/// CreatedDate 08/12/2011
/// </summary>
public partial class Administrator_AdminUserIU : System.Web.UI.Page
{
    private String userName = "";
    private String message = "";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //kiểm tra xem User thuộc nhóm Administrator hay không
            if (!Roles.IsUserInRole(HangSo.ROLE_ADMIN))
            {
                Response.Redirect("AdminMessage.aspx?Message=Người dùng hiện tại không có quyền vào chức năng này");
            }


            if (Request.QueryString["UserName"] != null)
            {
                try
                {
                    userName = Request.QueryString["UserName"].ToString();
                }
                catch (Exception ex)
                {
                    userName = "";
                }
            }

            if (Request.QueryString["Message"] != null)
            {
                try
                {
                    message = Request.QueryString["Message"].ToString();
                }
                catch (Exception ex)
                {
                    message = "";
                }
            }

            //hiển thị Message nếu có giá trị Message gửi sang từ màn hình nguồn
            this.lbMessage.Text = message;
            this.lbMessage.CssClass = "BlueCorlor";

            if (userName == "")
            {
                ViewState["action"] = HangSo.ACTION_ADD;
            }
            else
            {
                //Lấy thông tin user
                MembershipUser theUser = Membership.GetUser(userName);

                //trường hợp không lấy được thông tin thì trở lại trong danh sách người dùng
                if (theUser == null)
                {
                    Response.Redirect("AdminUsers.aspx");
                }
                else
                {
                    //Lấy thông tin role
                    String role = Roles.GetRolesForUser(userName)[0];

                    if (role == HangSo.ROLE_ADMIN)
                    {
                        this.ckAdmin.Checked = true;

                        // trường hợp sửa người dùng là nhóm Admin và Tài khoản đang Online -> không cho thay đổi nhóm
                        if (theUser.IsOnline)
                        {
                            this.ckAdmin.Enabled = false;
                        }
                        else
                        {
                            this.ckAdmin.Enabled = true;
                        }
                    }
                    else
                    {
                        this.ckAdmin.Checked = false;
                    }

                    this.txtEmail.Text = theUser.Email;
                    this.txtUserName.Text = theUser.UserName;
                    this.txtPassword.Attributes.Add("value", "123456789");
                    this.txtComfirmPassword.Attributes.Add("value", "123456789");
                    this.txtEmail.ReadOnly = true;
                    this.txtUserName.ReadOnly = true;
                    this.txtPassword.ReadOnly = true;
                    this.txtComfirmPassword.ReadOnly = true;
                    //trường hợp update thì disable 2 trường validate Password và ComfirmPassword
                    this.rvComfirmPassword.Enabled = false;
                    this.rvPassword.Enabled = false;
                    //lưu thong tin UserName và thông số lệnh vào ViewState
                    ViewState["UserName"] = theUser.UserName;
                    ViewState["action"] = HangSo.ACTION_UPDATE;
                    ViewState["Role"] = role;
                    this.lbAdminUser.Text = "Sửa thông tin người dùng : " + theUser.UserName;

                }
            }
        }
    }

    /// <summary>
    /// Author toanvt
    /// CreatedDate 08/12/2011
    /// </summary>
    /// <returns>Xác nhận trạng thái dữ liệu hợp lệ</returns>
    private Boolean ValidateData()
    {
        String message = "";
        Boolean isSuccess = true;

        if (this.txtPassword.Text.Trim().Length < 6 && ViewState["action"].ToString() == HangSo.ACTION_ADD)
        {
            message += "Password must have lengh >= 6";
            isSuccess = false;
        }

        if (!isSuccess)
            lbMessage.Text = message;

        return isSuccess;
    }

    protected void btnSave_Click(object sender, EventArgs e)
    {
        this.lbMessage.Text = "";
        this.lbMessage.CssClass = "";

        if (!ValidateData())
            return;

        Page.Validate();

        if (Page.IsValid)
        {
            String action = ViewState["action"].ToString();
            String userName = this.txtUserName.Text.Trim();
            String password = this.txtPassword.Text;
            String email = this.txtEmail.Text.Trim();
            String role;

            if (ckAdmin.Checked)
                role = HangSo.ROLE_ADMIN;
            else
                role = HangSo.ROLE_USER;

            if (action == HangSo.ACTION_ADD)
            {
                MembershipUser theUser = Membership.GetUser(userName);

                //trường hợp User Name chưa tồn tại mới cho đăng kí
                if (theUser == null)
                {
                    theUser = Membership.CreateUser(userName, password, email);// tạo user
                    Roles.AddUserToRole(userName, role); // thiết định người dùng vào nhóm đã chỉ định
                    Response.Redirect("AdminUsers.aspx");
                }
                //tồn tại rồi thì hiển thị thông báo
                else
                {
                    lbMessage.Text = "Email đã tồn tại";
                    this.txtEmail.Focus();
                }
            }
            else if (action == HangSo.ACTION_UPDATE)
            {
                MembershipUser theUser = Membership.GetUser(userName);
                //trường hợp User Name tồn tại mới cho cập nhật lại thông tin
                if (theUser != null)
                {
                    theUser.Email = this.txtEmail.Text.Trim();
                    Membership.UpdateUser(theUser);// lưu vào DB
                    // xóa user ra khỏi role được chỉ định
                    try
                    {
                        Roles.RemoveUserFromRole(userName, ViewState["Role"].ToString());
                    }
                    catch (Exception ex)
                    {
                    }

                    // cập nhật lại role cho user
                    try
                    {
                        Roles.AddUserToRole(userName, role);
                    }
                    catch (Exception ex)
                    {
                    }

                    Response.Redirect("AdminUsers.aspx");
                }
                //Chưa tồn tại thì trở lại trang list User
                else
                {
                    Response.Redirect("AdminUsers.aspx");
                }
            }
        }
    }

    protected void btnBack_Click(object sender, EventArgs e)
    {
        Response.Redirect("AdminUsers.aspx");
    }

    protected void btnApply_Click(object sender, EventArgs e)
    {
        this.lbMessage.Text = "";
        this.lbMessage.Text = "";

        if (!ValidateData())
            return;

        Page.Validate();

        if (Page.IsValid)
        {
            String action = ViewState["action"].ToString();
            String userName = this.txtUserName.Text.Trim();
            String password = this.txtPassword.Text;
            String email = this.txtEmail.Text.Trim();
            String role;

            if (ckAdmin.Checked)
                role = HangSo.ROLE_ADMIN;
            else
                role = HangSo.ROLE_USER;

            if (action == HangSo.ACTION_ADD)
            {
                MembershipUser theUser = Membership.GetUser(userName);

                //trường hợp User Name chưa tồn tại mới cho đăng kí
                if (theUser == null)
                {
                    theUser = Membership.CreateUser(userName, password, email);// tạo user
                    Roles.AddUserToRole(userName, role); // thiết định người dùng vào nhóm đã chỉ định
                    Response.Redirect("AdminUserIU.aspx?UserName=" + userName + "&Message=Tài khoản lưu thành công");
                }
                //tồn tại rồi thì hiển thị thông báo
                else
                {
                    lbMessage.Text = "Email đã tồn tại";
                    this.txtEmail.Focus();
                }
            }
            else if (action == HangSo.ACTION_UPDATE)
            {
                MembershipUser theUser = Membership.GetUser(userName);
                //trường hợp User Name tồn tại mới cho cập nhật lại thông tin
                if (theUser != null)
                {
                    theUser.Email = this.txtEmail.Text.Trim();
                    Membership.UpdateUser(theUser);// lưu vào DB
                    // xóa user ra khỏi role được chỉ định
                    try
                    {
                        Roles.RemoveUserFromRole(userName, ViewState["Role"].ToString());
                    }
                    catch (Exception ex)
                    {
                    }

                    // cập nhật lại role cho user
                    try
                    {
                        Roles.AddUserToRole(userName, role);
                    }
                    catch (Exception ex)
                    {
                    }

                    Response.Redirect("AdminUserIU.aspx?UserName=" + userName + "&Message=Tài khoản lưu thành công");
                }
                //Chưa tồn tại thì trở lại trang list User
                else
                {
                    Response.Redirect("AdminUsers.aspx");
                }
            }
        }
    }

}
